#include "cc.h"
#include "ui_cc.h"

CC::CC(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::CC)
{
    ui->setupUi(this);
    init();
}

CC::~CC()
{
    delete ui;
}

/************************************私有函数定义**********************************************/
//初始化界面
void CC::init()
{
    //创建action
    QAction *quitAction = new QAction(QIcon(":/ico/quitBtn"),tr("退出(&Q)"),this);// "&Q"  这种的形式我们称之为加速键
    quitAction->setShortcut(QKeySequence::Quit);//设置快捷键
    quitAction->setToolTip(tr("退出中控中心"));//在工具栏的鼠标指向提示
    quitAction->setStatusTip(tr("您确定要退出吗"));//在状态栏statusBar的鼠标指向提示信息

    QAction *refreshAction = new QAction(QIcon(":/ico/quitBtn"),tr("刷新(&R)"),this);//刷新按钮

    QAction *showDockAction = new QAction(tr("显示dock"),this);
    showDockAction->setCheckable(true);
    showDockAction->setChecked(true);

    //创建actionGroup
    QActionGroup *language = new QActionGroup(this);
    QAction *language_ch = language->addAction(tr("简体中文"));
    language_ch->setCheckable(true);//设置为可选中状态
    QAction *language_en = language->addAction(tr("English"));
    language_en->setCheckable(true);
    language_ch->setChecked(true);//设置为默认选中





    //创建菜单项
    QMenu *mainMenu = ui->menuBar->addMenu(tr("主菜单(&M)"));
    QMenu *toolMenu = ui->menuBar->addMenu(tr("工具(&T)"));
    //向主菜单添加动作
    mainMenu->addAction(refreshAction);
    mainMenu->addSeparator();//添加一条分割线
    mainMenu->addAction(language_ch);
    mainMenu->addAction(language_en);
    mainMenu->addSeparator();//添加一条分割线
    mainMenu->addAction(quitAction);
    toolMenu->addAction(showDockAction);

    this->menuBar()->addMenu(mainMenu);//将菜单添加到MainWindow默认提供的菜单栏中（默认提供的菜单栏是唯一的哦）
    this->menuBar()->addMenu(toolMenu);
    //使用默认的工具栏
    ui->mainToolBar->setObjectName("mainToolBar");//设置对象名，此处只做演示，所以名字未做改动，如果需要设置对象名一定要记得在ui的setupUI前执行
    ui->mainToolBar->addAction(quitAction);//使用MainWindow默认提供的工具栏
    //创建自己的工具栏
    QToolBar *setToolBar = new QToolBar(tr("设置"),this);
    this->addToolBar(setToolBar);//加入工具栏
    //添加工具按钮组(其实每个action放在menu中时都是一个QToolButton)
    QToolButton *themeBtn = new QToolButton(this);
    themeBtn->setText(tr("主题"));
    QMenu *themeMenu = new QMenu(this);
    themeMenu->addAction(tr("红色"));
    themeMenu->addAction(tr("绿色"));
    themeMenu->addAction(tr("蓝色"));
    themeBtn->setMenu(themeMenu);
    themeBtn->setPopupMode(QToolButton::MenuButtonPopup);
    setToolBar->addWidget(themeBtn);
    //添加
    QSpinBox *brightnessSpinBox = new QSpinBox(this);
    setToolBar->addWidget(brightnessSpinBox);

    //添加Dock
    QDockWidget *dockSet = new QDockWidget(tr("浮动工具箱"),this);
    dockSet->setFloating(true);//允许浮动
    dockSet->setAllowedAreas(Qt::DockWidgetArea::LeftDockWidgetArea | Qt::DockWidgetArea::RightDockWidgetArea);

    //设置中心区域
    //this->setCentralWidget();

    //设置状态栏
    ui->statusBar->showMessage(tr("欢迎使用信通版控制中心"),-1);// 设置临时显示的消息，单位是毫秒,为负值时代表不限定时间
    QLabel *statusLabel = new QLabel(this);
    statusLabel->setFrameStyle(QFrame::Box | QFrame::Sunken);
    statusLabel->setText(tr("作者：王占峰"));
    ui->statusBar->addPermanentWidget(statusLabel);
    ui->statusBar->setSizeGripEnabled(true);//不允许出现拖动右下角的调整窗口大小的标识符

    //绑定信号和槽
    connect(quitAction,&QAction::triggered,this,&QMainWindow::close);
    //刷新的操作
    connect(refreshAction,&QAction::triggered,this,&CC::refreshData);
    //临时先表示一下,正常情况下需要判断当前是否选中状态再处理对应的dock的显示与否
//    connect(showDockAction,&QAction::triggered,dockSet,&QDockWidget::show);
    //对于这种只被一次调用的行为,可以使用匿名函数方式[lambda表达式形式],或者叫做回调函数方式
    connect(showDockAction,&QAction::triggered,dockSet,[=](){
        if(showDockAction->isChecked()){
            dockSet->show();
        }else{
            dockSet->hide();
        }
        showDockAction->setChecked(showDockAction->isChecked());
    });
    //dock如果使用了 x 关闭 ,更新按钮的表示形式
    connect(dockSet,&QDockWidget::visibilityChanged,this,[=](bool sta){
        showDockAction->setChecked(sta);
    });
}

//slots
void CC::refreshData(){
    qDebug() << "手动刷新数据" << endl;
    QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);

    connect(accessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finishedSlot(QNetworkReply*)));

    QNetworkRequest request;
    request.setUrl(QUrl("http://192.168.31.103:8888/cgi-bin/getM?username=wzf&password=123456"));

    //get
    accessManager->get(request);
}

void CC::finishedSlot(QNetworkReply *reply)
{
     if (reply->error() == QNetworkReply::NoError)
     {
         QByteArray bytes = reply->readAll();
         qDebug() << bytes;
         if(reply->url()==QUrl("http://192.168.31.103:8888/cgi-bin/getM?username=wzf&password=123456")){
              qDebug() << "返回的数据" << bytes << endl;//GET返回
         }else{
              //其他形式返回的处理
         }
     }
     else
     {
         qDebug() << "finishedSlot errors here";
         qDebug( "found error .... code: %d\n", (int)reply->error());
         qDebug(qPrintable(reply->errorString()));
     }
     reply->deleteLater();
}
